﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Timers;
using System.IO;
using System.Threading;

/* Para subprocesos
 *         delegate void SetTextCallback(string text);

        private void SetText(string text)
        {
            // InvokeRequired required compares the thread ID of the
            // calling thread to the thread ID of the creating thread.
            // If these threads are different, it returns true.
            if (this.textBox1.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.Invoke(d, new object[] { text });
            }
            else
            {
                this.textBox1.Text = text;
            }
        }
 * */


namespace Principal
{
    static class Program
    {
        static Mutex mutex = new Mutex(false, "oreilly.com OneAtATimeDemo"); 


        /// <summary>
        /// Punto de entrada principal para la aplicación.
        /// </summary>
        [STAThread]
        static void Main()
        {
            

            // Wait 5 seconds if contended – in case another instance 
            // of the program is in the process of shutting down. 

            

            if (!mutex.WaitOne(TimeSpan.FromSeconds(5), false))
            {
                MessageBox.Show("¡Otra instancia del programa se encuentra actualmente en ejecución!");
                return;
            }

            //ConfiguracionInicial.cargarConfiguracion();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1(ConfiguracionInicial.cargarConfiguracion(), mutex));
        }

        private static string[] cargarConfiguracion() 
        {
            string rutaArchivo = System.IO.Directory.GetCurrentDirectory() + "\\config.data";
            string[] parametros = new string[10];

            if (!System.IO.File.Exists(rutaArchivo))
            {
                System.IO.File.Create(rutaArchivo).Close();

            }

            StreamReader fs = new StreamReader(rutaArchivo);
            int i=0;

            try
            {
                for(i=0;i<parametros.Length && parametros[i]!="";i++)
                {
                    parametros[i] = fs.ReadLine();

                    System.Convert.ToBoolean(parametros[i]);
                }

               
            }
            
            catch //(System.FormatException ex) TODO ¿Borrar?
            {
                try
                {
                    System.Convert.ToDouble(parametros[i]);
                }
                catch //(System.FormatException ex2) TODO ¿Borrar?
                {
                    fs.Close();
                    crearConfiguracion(rutaArchivo, parametros);
                }
            }
            fs.Close();
            return parametros;
        }


        /// <summary>
        /// Método obsoleto
        /// </summary>
        /// <param name="rutaArchivo"></param>
        /// <param name="parametros"></param>
        private static void crearConfiguracion(string rutaArchivo,string[] parametros)
        {
            parametros[0] = "False"; //Sincronizar 
            parametros[1] = "False"; //IgnorarArchivos
            parametros[2] = "False"; //SincronizarAmbosSentidos
            parametros[3] = "False"; //CorrerAlIniciar
            parametros[4] = "0.5"; //ItervaloSincronizar
            parametros[5] = "500"; //TamArchivos
            /*parametros[6] =
            parametros[7] =
            parametros[8] =
            parametros[9] =*/

            StreamWriter fs = new StreamWriter(rutaArchivo);

            fs.WriteLine(parametros[0]);
            fs.WriteLine(parametros[1]);
            fs.WriteLine(parametros[2]);
            fs.WriteLine(parametros[3]);
            fs.WriteLine(parametros[4]);
            fs.WriteLine(parametros[5]);

            fs.Close();
        }
    }
}
